package com.ai.aicodemather.core.parser;

import cn.hutool.core.util.StrUtil;
import com.ai.aicodemather.ai.model.HtmlCodeResult;
import com.ai.aicodemather.ai.model.MultiFileCodeResult;
import com.ai.aicodemather.exception.BusinessException;
import com.ai.aicodemather.exception.ErrorCode;
import com.ai.aicodemather.exception.ThrowUtils;
import com.ai.aicodemather.model.enums.CodeGenTypeEnum;

/**
 * 代码解析执行器 --执行器模式
 */
public class CodeParseExecutor {

    private static final CodeParser<HtmlCodeResult> HTML_CODE_PARSER = new HtmlCodeParser();
    private static final CodeParser<MultiFileCodeResult> MULTI_FILE_CODE_RESULT_CODE_PARSER = new MultiFileCodeParser();

    /**
     * 统一代码解析执行器。
     * 不同类型的代码输入参数相同，但是输出参数不同。使用Object
     *
     * @param codeContent
     * @param codeGenTypeEnum
     * @return
     */
    public static Object codeParseExecutor(String codeContent, CodeGenTypeEnum codeGenTypeEnum) {
        ThrowUtils.throwIf(StrUtil.isBlank(codeContent), ErrorCode.PARAMS_ERROR, "代码内容为空");
        ThrowUtils.throwIf(codeGenTypeEnum == null, ErrorCode.PARAMS_ERROR, "代码类型为空");
        // 根据不同的类型选择不同的解析器
        return switch (codeGenTypeEnum) {
            case HTML -> HTML_CODE_PARSER.codeParse(codeContent);
            case MULTI_FILE -> MULTI_FILE_CODE_RESULT_CODE_PARSER.codeParse(codeContent);
            default ->
                    throw new BusinessException(ErrorCode.SYSTEM_ERROR, "不支持的代码类型: " + codeGenTypeEnum.getValue());
        };
    }
}
